package com.lg.mvc.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

/**
 * author: LG
 * date: 2019-09-06 13:56
 * desc:
 * 程序加载代码的顺序，下面有标
 *
 * private String version;
 * private String name;
 * 这样没有赋值的常量，不会被赋值
 * 但是debugger是 显示null
 * 应该和常量加载时候一起被赋值为null
 *
 * @Autowired
 * private Environment environment;
 * 其类 也应该是容器中的bean才行
 * Environment  不能被 final static 所修饰
 *
 * 类加载：静态 常量 构造方法，从上到下 依次加载  然后是 bean的属性赋值
 * bean的生命周期 -> 属性复制  @value
 */
//根据前缀获取配置文件参数  获取数组或者list todo
@ConfigurationProperties(prefix = "spring.application")
@Configuration
@Data
public class BaseConfig {
    private String version;
    private String name;

//    通过environment获取 参数
    @Autowired
    private Environment environment;


    @Value("${number}")
    private String number;



    public String getEnvProperty(String key){
        return environment.getProperty(key);
    }

//    // 一
//    static {
//        System.out.println("静态0");
//    }
//    // 二
//    private static int age = 11;
//    // 五
//    private  int a = 11;
//    // 三
//    static {
//        System.out.println("静态1");
//    }
//    // 七
//    public BaseConfig (){
//        System.out.println("构造方法");
//        System.out.println("name：" + name);
//        System.out.println("age：" + age);
//    }
//    // 六
//    private  int b = 11;
//    // 四
//    static {
//        System.out.println("静态2");
//    }
//    // 八 @value赋值调用set方法
//    public void setVersion(String version) {
//        System.out.println("@value");
//        this.version = version;
//    }
//
}
